const global_date = {

    /**
     * 返回格式日期字符串，即 yyyy{分隔符}MM{分隔符}dd
     * @param {any} year 年份
     * @param {any} month 月份
     * @param {any} day 日期
     * @param {String} separator 分隔符
     */
    getDate(year, month, day, separator = "") {
        if (year !== undefined && year.length === 1) {
            separator =  year;
            year = undefined;
        }
        year = this.getYear(year);
        month = this.getMonth(month);
        day = this.getDay(day);
        return year + separator + month + separator + day;
    },
    /**
     * 输入：yy -> 输出：yyyy，或 输入：undefined，输出 yyyy
     * @param {Number} year 年份
     */
    getYear(year = new Date().getFullYear()) {
        return year < 100 ? year + 2000 : year;
    },
    /**
     * 输入：M -> 输出：MM，或 输入：undefined，输出 MM
     * @param {Number} month 月份
     */
    getMonth(month = (new Date().getMonth()) + 1) {
        return month < 10 ? "0" + month : month;
    },
    /**
     * 输入：d -> 输出：dd，或 输入：undefined，输出 dd
     * @param {Number} day 日期
     */
    getDay(day = new Date().getDate()) {
        return day < 10 ? "0" + day : day;
    },
    /**
     * 解析无分隔符的日期字符串 输入：yyyyMMdd -> 输出：yyyy{}MM{}dd
     * @param {String | Number} val 完整日期
     * @param {String} separator 分隔符
     */
    parseFullDate(val, separator) {
        let year = this.parseYear(val);
        let month = this.parseMonth(val);
        let day = this.parseDay(val);
        return this.getDate(year, month, day, separator);
    },
    /**
     * 输入：yyyyMMdd -> 输出：yyyy
     * @param {String} val 完整日期
     */
    parseYear(val) {
        return parseInt(`${val}`.substring(0, 4));
    },
    /**
     * 输入：yyyyMMdd -> 输出：MM
     * @param {String} val 完整日期
     */
    parseMonth(val) {
        return parseInt(`${val}`.substring(4, 6));
    },
    /**
     * 输入：yyyyMMdd -> 输出：dd
     * @param {String} val 完整日期
     */
    parseDay(val) {
        return parseInt(`${val}`.substring(6, 8));
    },
    /**
     * 返回今天周几
     * @param {Number} week 周几编号
     */
    weekOfToday(week = new Date().getDay()) {
        switch(week) {
            case 1: return "周一";
            case 2: return "周二";
            case 3: return "周三";
            case 4: return "周四";
            case 5: return "周五";
        }
    },
    /**
     * 日期相减
     * @param {any} time_a 格式化日期
     * @param {any} time_b 格式化日期
     */
    subOfDate(time_a, time_b) {
        let stamp = new Date(time_a).getTime() - new Date(time_b).getTime();
        let time = (stamp / 1000);
        let res = parseInt(time / 3600.0 / 24);
        if (res < 10 && res >= 0) {
            return "0" + res;
        } else {
            return res;
        }
    },
    
}

export default global_date;